import { parseHTML } from "./parse-html";
import { generate } from "./generate";
import { logger } from "../utils/index";

// 把template编译成虚拟dom
export function compileToFunction(template) {
	// 解析模板 -> ast
	logger.info("开始解析模板生成ast");
	const root = parseHTML(template);
	logger.info("解析模板生成ast完成");
	// 解析ast -> code 代码字符串
	logger.info("开始解析ast生成代码字符串");
	const code = generate(root);
	logger.info("解析ast生成代码字符串完成");
	// 所有的模板引擎实现都需要 new Function + with(改变运行的作用域)
	const renderFn = new Function(`with(this){return ${code}}`);
	logger.info("通过生成的代码字符串生成渲染方法");
	// 返回渲染函数
	return renderFn;
}
